#!/bin/bash

# 检查参数
if [ $# -ne 1 ]; then
    echo "Usage: $0 <port>"
    exit 1
fi

PORT=$1
INTERFACE=$(ip route get 1 | awk '{print $5; exit}') # 获取默认网卡

# 函数：获取指定端口的当前收发字节数
get_bytes() {
    local port=$1
    # 找到所有占用该端口的 TCP socket 的 inode
    local inodes=$(ss -tulpen | grep ":$port " | awk '{print $4}' | cut -d',' -f3 | cut -d'=' -f2)
    
    local send_bytes=0
    local recv_bytes=0

    # 遍历 inode，从 /proc/net/tcp 中找到对应的发送和接收队列字节数
    for inode in $inodes; do
        # 格式: sl local_address rem_address st tx_queue rx_queue ... inode
        local line=$(cat /proc/net/tcp | grep -w "$inode" | head -n 1)
        if [ -n "$line" ]; then
            txq=$(echo $line | awk '{print $5}' | cut -d':' -f1)
            rxq=$(echo $line | awk '{print $6}' | cut -d':' -f1)
            # 十六进制转十进制
            send_bytes=$((send_bytes + 0x$txq))
            recv_bytes=$((recv_bytes + 0x$rxq))
        fi
    done

    echo "$send_bytes $recv_bytes"
}

# 获取初始值
read tx1 rx1 <<< $(get_bytes $PORT)
sleep 10
# 获取结束值
read tx2 rx2 <<< $(get_bytes $PORT)

# 计算速率 (字节/秒)
TX_RATE=$((tx2 - tx1))
RX_RATE=$((rx2 - rx1))

echo "Port: $PORT"
echo "TX: $TX_RATE B/s"
echo "RX: $RX_RATE B/s"